package org.sky.algorithm.other;

/**
 * 汉诺塔问题
 *
 * @author fog
 * @date 2021/9/5
 */

public class HanoiTest {

    public static void main(String[] args) {

        hanoi(3, "A", "B", "C");

    }

    /**
     * 无论有多少盘子，统一看成最下面一个和剩余的
     *
     * @param i    有几个盘子
     * @param from 起始柱子
     * @param in   中间柱子
     * @param to   目标柱子
     */
    private static void hanoi(int i, String from, String in, String to) {

        if (i == 1) {
            System.out.println("第 1 个盘子从 " + from + " 移到 " + to);
        } else {

            // 移动上面的盘子到中间柱子
            hanoi(i - 1, from, to, in);

            // 移动下面的盘子
            System.out.println("第 " + i + " 个盘子从 " + from + " 移到 " + to);

            // 把上面的所有盘子从中间位置移到目标位置
            hanoi(i - 1, in, from, to);

        }


    }

}
